#include "Next.h"


Next::Next(Assignable *_var, vm *_env, int _ln)
    :var(_var), env(_env), Stmt(_ln)
{
}


Next::~Next(void)
{
    delete var;
}

int Next::Eval()
{
    if (var->Type() == INT)
    {
        int value = var->EvalInt();
        int step = var->Step();
        var->SetValue(value + step);

        if ((step > 0 && value + step > var->MaxValue())
            || (step < 0 && value + step < var->MaxValue()))
        {
            return -1;
        }
        else
        {
            return env->GetNextLine(var->Name());
        }
    }
    else if (var->Type() == FLT)
    {
        float value = var->EvalFlt();
        float step = var->FltStep();
        var->SetValue(value + step);

        if ((step > 0 && value + step > var->MaxFltValue())
            || (step < 0 && value + step < var->MaxFltValue()))
        {
            return -1;
        }
        else
        {
            return env->GetNextLine(var->Name());
        }
    }
    else
    {
        assert(0);
        return -1;
    }
    
}
